package leetcode.题库.数组.二分;

/**
 * 搜索旋转排序数组
 *
 * @author yanzhenming
 * @date 2023/3/27  17:45
 */

/**
 * 描述
 *
 * 在4,5,6,7,0,1,2中找到指定的数
 */

/**
 * 思路
 * 一定有一侧有序，先判断那侧有序
 */
public class Solution33 {

    public int search(int[] nums, int target) {
        int l = 0, r = nums.length-1;
        while (l <= r) {
            int mid = (l+r) >> 1;
            if (nums[mid] == target) {
                return mid;
            }
            // 右侧有序
            if (nums[mid] < nums[r]) {
                if (nums[mid] < target && target <= nums[r]) {
                    l = mid + 1;
                } else {
                    r= mid - 1;
                }
            } else { // 左侧有序（因为不满足前面的右侧有序，所以右侧无序，因为只有一侧无序，所以左侧一定有序）
                if (nums[l] <= target && target < nums[mid]) {
                    r = mid - 1;
                } else {
                    l = mid + 1;
                }
            }
        }
        return -1;
    }

}
